Skip to content

DEV: добавить поиск и фильтр программ для экспертов - #758

Merged
TThanos3000 merged 2 commits into
devfrom
feature/dev-expert-admin-search
Sep 28, 2026
Merged

TThanos3000 merged 2 commits into
devfrom
feature/dev-expert-admin-search

Conversation

@TThanos3000

@TThanos3000 TThanos3000 commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

В Django Admin → Experts добавлены стандартная строка поиска и фильтр By partner program. Можно найти эксперта по имени, фамилии или email и сузить выдачу до участников legacy-программы. Таблица сохраняет id, user; пользователи загружаются вместе со строками.

Base / head

  • Exact base (dev): 11f1e66a85e266d57fc6b0f8c080ee8cd0683f19.
  • Exact head (feature/dev-expert-admin-search): f7285d20cf8e8deafa266efd04859ca12b75bc17.

Search / program filter / performance

  • search_fields = ("user__first_name", "user__last_name", "user__email"): стандартный icontains, AND между словами, OR между полями. Полное имя ищется по нескольким полям, это не строгое сравнение ФИО.
  • list_filter = ("user__partner_program_profiles__partner_program",) использует RelatedFieldListFilter, существующие PartnerProgram и их __str__. Legacy путь: Expert.user → CustomUser.partner_program_profiles → PartnerProgramUserProfile.partner_program.
  • All снимает программу, сохраняя search. Без фильтра видны и эксперты без программы. Search + filter работают вместе.
  • Явный distinct() не требуется: Django 4.2.11 распознаёт reverse FK и устраняет потенциальные дубли через SQL EXISTS. Эксперт в двух программах отображается один раз.
  • Несуществующий числовой program ID даёт пустую выдачу; нечисловой — стандартный redirect на ?e=1 без 500.
  • list_select_related = ("user",): строки и связанные пользователи загружаются одним SQL-запросом, без N+1. Стандартные запросы counts/choices/session/permissions остаются.

Переносимость case-insensitive тестов

Проверки разделены по возможностям БД:

  • Portable ASCII: [email protected] → [email protected], выполняется на всех БД.
  • PostgreSQL-only: Анна Смирнова → АННА СМИРНОВА; явно skipTest при connection.vendor != "postgresql".
  • Русский комментарий объясняет ограничение SQLite LIKE для Unicode/кириллицы и проверку production PostgreSQL в Backend PostgreSQL CI. QA README явно разделяет оба контракта.

Доработка после head 381afde меняет только users/tests/test_expert_admin.py и docs/expert-admin/README.md. Production users/admin.py совпадает побайтово; get_search_results, search_fields, Python-фильтрация, настройки БД и workflows не менялись.

Файлы PR и scope

  • users/admin.py: три настройки ExpertAdmin; перенос строк Black в одном прежнем выражении CustomUserAdmin без изменения поведения.
  • users/tests/test_expert_admin.py: 19 тестов search/filter/duplicates/query count/permissions и DB-specific case-insensitive.
  • docs/expert-admin/README.md, browser script/results и два PNG: описание и QA.

list_display = ("id", "user") сохранён. Модели, schema, migrations и permissions/staff/superuser не менялись. Angular untouched; React untouched. Application/Team/Submission/current_application не используются. Dependencies/workflows/test harness сохранены.

Локальные проверки текущего head

Python 3.11.15, Django 4.2.11; обычные SQLite settings (DEBUG=True, procollab.settings) и отдельный PostgreSQL 18.1 (procollab.settings_ci). Существующие настройки не редактировались; отдельные рабочие копии исключают пересечение тестовых файлов/БД.

Проверка Результат Exit
Targeted admin / SQLite 19 cases: 18 passed, 1 PostgreSQL-only skip 0
Targeted admin / PostgreSQL 19 passed, 0 skipped 0
Full обычный SQLite suite 920 cases: 915 passed, 5 skipped (603.568s); тесты OK, ошибка Windows при teardown 1
Full PostgreSQL suite, --keepdb как в CI 920 passed, 0 skipped (310.333s) 0
Django check / обе конфигурации 0 issues 0
Black / Flake8 изменённого Python-файла pass 0
git diff --check pass 0

Локальный полный SQLite suite вывел OK (skipped=5), затем завершился с PermissionError: [WinError 32] при удалении test_db.sqlite3 на Windows. После выхода тестового процесса временная БД удалена успешно. Это ошибка teardown, не тестовых assertions; обычный GitHub CI на Linux полностью прошёл, включая cleanup. Из 5 skips один — новый тест кириллицы, остальные 4 — существующие ограничения набора. Настройки, workflow и test harness для обхода этой ошибки не менялись.

На первоначальном head также выполнены migration check (No changes detected) и настоящий browser QA /admin/users/expert/: 17 assertions, 11 состояний, 0 JS errors / HTTP 500. Production-код этой доработкой не менялся; повторная браузерная проверка не требовалась.

GitHub CI на exact head

QA README · Browser results

Все эксперты

Поиск и программа

Тот же Draft PR #758. Merge/deploy не выполнялись.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 28, 2026 12:25
@TThanos3000
TThanos3000 merged commit 29be99d into dev Sep 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants